//
//  init.h
//  ltlbmc
//
//  Created by GD Huang on 5/21/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#ifndef ltlbmc_init_h
#define ltlbmc_init_h

#include "exp.h"
#include "offset.h"
#include "typ.h"
#include "astVisitor.h"


namespace cilast {

    class astVisitor;
    
    class init : public OCamlObject {
        
        virtual int accept(astVisitor*);
    };
    
    class SingleInit : public init {
    public:    
        exp* mexp;
        
        int accept(astVisitor*);
    };
    
    
    class OffsetInit : public init {
    public:    
        offset* moffset;
        init* minit;
        
        int accept(astVisitor*);
    };
    
    
    class CompoundInit : public init {
    public:    
        typ* mtyp;
        std::vector<OffsetInit*> minits;
        
        int accept(astVisitor*);
    };
    
}

#endif
